package redecolaborativa.server.objetos;



import java.io.Serializable;
import java.util.GregorianCalendar;

import redecolaborativa.server.enums.TipoDeMensagem;
import redecolaborativa.server.excecoes.*;


/**
 * Classe que representa uma mensagem enviada pelo usuario. Cada mensagem possui um tipo,
 * assunto, descricao e uma data correspondente ao dia em que a mensagem foi enviada.
 * @author Isabelly Rocha, Lilia Sampaio e Pedro Adelino.
 *
 */
public class Mensagem implements Serializable {
	private static final long serialVersionUID = 1L;
	private TipoDeMensagem tipoDeMensagem;
	private String assunto, descricao;
	private GregorianCalendar data;
	
	/**
	 * Cria um objeto do tipo Mensagem.
	 * @param tipoDeMensagem Tipo da mensagem (Negocio ou OffTopic)
	 * @param assunto Assunto da mensagem
	 * @param descricao Mensagem descrita
	 * @throws TipoDeMensagemInvalido Se o tipo da mensagem for nulo ou vazio.
	 * @throws AssuntoInvalidoException Se o assunto da mensagem for nulo ou vazio.
	 * @throws DescricaoInvalidaException  Se a descricao da mensagem for nula ou vazia.
	 * @throws DataInvalidaException  Se a data da mensagem for nula.
	 */
	public Mensagem(TipoDeMensagem tipoDeMensagem, String assunto, String descricao) throws TipoDeMensagemInvalido, AssuntoInvalidoException, DescricaoInvalidaException {
		if(tipoDeMensagem == null || tipoDeMensagem.toString().trim().equals("")) {
			throw new TipoDeMensagemInvalido("Tipo inválido.");
		} if(assunto == null || assunto.trim().equals("")) {
			throw new AssuntoInvalidoException("Assunto inválido");
		} if(descricao == null || descricao.trim().equals("")) {
			throw new DescricaoInvalidaException("Mensagem inválida");
		}
		this.tipoDeMensagem = tipoDeMensagem;
		this.assunto = assunto;
		this.descricao = descricao;
		this.data = new GregorianCalendar();
	}
	
	/**
	 * Recupera o tipo da mensagem.
	 * @return O tipo da mensagem
	 */
	public String getTipoDeMensagem() {
		return tipoDeMensagem.name();
	}
	
	/**
	 * Recupera o assunto da mensagem.
	 * @return O assunto da mensagem
	 */
	public String getAssunto() {
		return assunto;
	}
	
	/**
	 * Recupera a descricao da mensagem.
	 * @return A descricao da mensagem
	 */
	public String getDescricao() {
		return descricao;
	}
	
	/**
	 * Recupera a data da mensagem.
	 * @return A data da mensagem
	 */
	public GregorianCalendar getData() {
		return data;
	}
}
